StringTokenizer 클래스
✒️ 2025-05-15 11:32 내용 수정
문자열을 특정 구분자(delimiter)를 기준으로 토큰(Token)이라는 문자열 조각으로 분리하는데 사용하는 클래스
- 구분자(delimiter) : StringTokenizer를 비롯한 여러 문자열 클래스에서 문자를 구분할 때 사용하는 것.
- 주로 공백(whitespace)로 지정하지만, 사용자 지정으로도 만들 수 있다.
- StringTokenizer는 구분자로 단 하나의 문자만 사용할 수 있으므로, 복잡한 형태로 구분자를 사용하려면 정규식을 사용해야 한다.
- 구분자로 사용할 하나의 문자가 여러 개라면 한 번에 써서 구분자 등록을 해줄 수 있다.
String.split(),Scanner.useDelim()(String 클래스, Scanner 클래스)
- 기본 구분자 : 공백 문자(스페이스, 탭, 개행) 등으로 문자를 분리한다.
StringTokenizer 인스턴스이름 = new StringTokenizer(String str);
StringTokenizer 인스턴스이름 = new StringTokenizer(String str, String delim);
| 메소드 | 설명 |
|---|---|
String nextToken() |
객체에서 다음 토큰을 반환 |
String nextToken(String delim) |
delim을 기준으로 다음 토큰을 반환 |
int countTokens() |
전체 토큰 수를 반환 |
boolean hasMoreToken() |
토큰이 남아있는지 확인, 루프 돌릴 때 꼭 확인 |
boolean equals(Object obj) |
토큰이 전달 받은 obj랑 같은지 반환 |
-
StringTokenizer를 쓰기 적합한 상황(StringTokenizer는 legacy로 분류되었음)
- 참고 자료 : 조가희's java StringTokenizer : 생각보다 느릴까? 뜯어보자, effiRin's Java StringTokenizer와 Split() 메서드 언제 써야 할까
- 구분자에 유니코드가 없고, 구분자의 길이가 길지 않을 때
- 구분자가 복잡하지 않은 한 문자일 때
- 반환 타입이 배열이 아닌 문자열인 경우가 적합할 때
-
토큰 호출과 토큰 메소드 사용 시 주의할 것
- StringTokenizer를 사용할 때
nextToken()을 호출하면 StringTokenizer는 자동으로 다음 토큰을 호출하고, 그 토큰을 호출하면 그 다음 토큰을 호출한다. - 그러므로
nextToken()을 두 번 연속으로 호출하면 첫 번째 호출에서 리턴된 토큰 값과 두 번째 호출에서 리턴된 토큰 값이 다를 수 있다. - 따라서
st.nextToken().equals()라고 작성하면 토큰을 두 번 연속으로 호출하기 때문에 각각 리턴된 토큰이 달라서 비교 시 문제가 발생한다. - 하지만
st.nextToken()를 변수에 저장하고 그 변수를 호출하면 변수를 사용하기 때문에 같은 토큰을 두 번 호출하는 일이 발생하지 않는다.
- StringTokenizer를 사용할 때